Suppose we would like to define a Lisp construct to increment
a variable value, much like the ++ operator in C. We
would like to write (inc x) and have the effect of
(setq x (1+ x)). Here’s a macro definition
that does the job:
(defmacro inc (var) (list 'setq var (list '1+ var)))
When this is called with (inc x), the argument
var is the symbol x—not
the value of x, as it would be in a
function. The body of the macro uses this to construct the
expansion, which is (setq x (1+ x)). Once the macro
definition returns this expansion, Lisp proceeds to evaluate it,
thus incrementing x.
This predicate tests whether its argument is a macro, and
returns t if so, nil otherwise.